var minPathSum = function(grid) {
    let m = grid.length, n = grid[0].length;

    let dp = Array.from(Array(m)).map(() => Array(n).fill(0));

    for (let i = 0; i < m; i++) {
        for (let j = 0; j < n; j++) {
            if (i === 0 && j === 0) {
                dp[i][j] = grid[i][j];
            } else if (i === 0) {
                dp[i][j] = dp[i][j-1] + grid[i][j];
            } else if (j === 0) {
                dp[i][j] = dp[i-1][j] + grid[i][j];
            } else {
                dp[i][j] = Math.min(dp[i][j-1], dp[i-1][j]) + grid[i][j];
            }
        }
    };
    return dp[m-1][n-1];
};



// test
const grid = [[1,3,1],[1,5,1],[4,2,1]];

console.log(minPathSum(grid)); // 7
